<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组的新增高级方法</title>
</head>
<body>
<script>
  /**
   * filter       过滤器
   * map          映射
   * reduce       汇总
   *
   * 需求
   * 有一个商品列表：
   *
   * 1. 将大于10元的商品打折， 取出大于10元的商品
   * 2. 将10元以上的商品打5折
   * 3. 打完折的商品总价是多少
   */
  var goods = [5,3,1,20,60,70,90,30];
  //普通方法 var
  // var sum = 0;
  // for (var i=0; i<goods.length; i++){
  //   if(goods[i] > 10){
  //     sum += goods[i]*0.5;
  //   }
  // }
  //普通方法 let
  //  let sum = 0;
  //  for (let n of goods){
  //   if(n > 10){
  //     sum += n*0.5;
  //   }
  // }
  // //filter       过滤器
  // let goods1 = goods.filter(function (n){
  //     return n > 10;
  // })
  // console.log('goods1的结果' + goods1);
  // //map          映射
  // let goods2 = goods1.map(function (n){
  //   return n * 0.5;
  // })
  // console.log('goods2的结果' + goods2);
  // //reduce          汇总
  // /*
  //  第一次，s 参数是 0 , n 是数组中的第一个元素 15
  //  第二次，s 参数是 是第一次回调函数返回值 , n 是数组中的第二个元素 40
  //  第三次，s 参数是 是第二次回调函数返回值 , n 是数组中的第三个元素 25
  //  第四次，s 参数是 是上一次回调函数返回值 , n 是数组中的第四个元素 30
  // */
  // let goods3 = goods2.reduce(function (s,n){
  //   return s + n;
  // })
  // console.log('goods3的结果' + goods3);

  //利用链式编程
  let sum = goods.filter(n => n > 10).map(n => n * 0.5).reduce((s,n) => s + n);

  console.log('总价是：'+sum);
</script>
</body>
</html>